package com.zhangsun.newMvvm.common.tools;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

import java.util.Map;

public class GsonTool {

    /**
     * json转对象
     *
     * @param jsonStr json
     * @param cls     对象
     * @param <T>     对象
     * @return 结果
     */
    public static <T> T getObject(String jsonStr, Class<T> cls) {
        Gson gson = new GsonBuilder().serializeNulls().create();
        return gson.fromJson(jsonStr, cls);
    }

    /**
     * 将json字符串转成map对象
     *
     * @param jsonStr   json
     * @param typetoken 类型
     * @return 结果
     */
    public static Map<String, Object> getMapByJson(String jsonStr, TypeToken<Map<String, Object>> typetoken) {
        GsonBuilder gb = new GsonBuilder();
        return gb.create().fromJson(jsonStr, typetoken.getType());
    }

    /**
     * 转json字符串
     *
     * @param obj 对象
     * @return json
     */
    public static String toJson(Object obj) {
        GsonBuilder gb = new GsonBuilder().serializeNulls();
        return getJson(gb, obj);
    }

    /**
     * 统一调用返回json字符串
     *
     * @param gb  gson构造器
     * @param obj 对象
     * @return json
     */
    private static String getJson(GsonBuilder gb, Object obj) {
        return gb.create().toJson(obj);
    }

}
